package org.javahispano.javacup.tacticas_aceptadas.jcrosas.chuky.futbolista.habilidad;

import org.javahispano.javacup.modelo.Comando;
import org.javahispano.javacup.modelo.ComandoGolpearBalon;
import org.javahispano.javacup.tacticas_aceptadas.jcrosas.chuky.entrenador.Sugerencia;
import org.javahispano.javacup.tacticas_aceptadas.jcrosas.chuky.futbolista.Futbolista;
import org.javahispano.javacup.tacticas_aceptadas.jcrosas.chuky.futbolista.FutbolistaBase;
import org.javahispano.javacup.tacticas_aceptadas.jcrosas.chuky.futbolista.habilidad.Habilidad;

/**
 * @author Joan Crosas
 *
 */
public class GolInExtremis implements Habilidad {
	
	private Futbolista futbolista;
	
	/**
	 * 
	 */
	public GolInExtremis( Futbolista futbolista ) {
		this.futbolista = futbolista;
	}

	@Override
	public boolean ejecutar() {
		if( futbolista.getIteracionesParaRematar() == 0 && 
				futbolista.balonEncima( futbolista.getVisionPartido().getBalon() ) && 
				futbolista.getDistanciaPorteriaRival() < 30.0 ) {
			
			double anguloPorteriaInverso = FutbolistaBase.POSICION_PORTERIA_RIVAL.angulo( futbolista.getPosicion() );
			if( anguloPorteriaInverso > corregirAngulo(5*Math.PI/4) && anguloPorteriaInverso < corregirAngulo(7*Math.PI/4) ) {
				Comando comando = new ComandoGolpearBalon( futbolista.getIndice(), FutbolistaBase.POSICION_PORTERIA_RIVAL.toPosicion(), 1.0, 21 );
				
				Sugerencia sugerencia = new Sugerencia( Sugerencia.TipoSugerencia.CORRER );
				sugerencia.setFutbolista( futbolista );
				sugerencia.setPosicionDestino( FutbolistaBase.POSICION_PORTERIA_RIVAL );
				sugerencia.setTiempoValida( 18 );
				
				futbolista.getVisionPartido().addComando( comando );
				futbolista.getVisionPartido().addSugerencia( sugerencia );
				
				return true;
			}
		}
		
		return false;
	}
	
	
	private double corregirAngulo( double angulo ) {
		angulo = angulo % (Math.PI * 2d);
        if (angulo >= Math.PI) {
        	angulo = angulo - 2d * Math.PI;
        }
        return angulo;
		
	}

}
